package com.xing.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xing.Utils.Result;
import com.xing.dao.LiveTagDao;
import com.xing.dto.LiveRoomUpdateDTO;
import com.xing.dto.LiveTagDTO;
import com.xing.dto.LiveTagSaveDTO;
import com.xing.dto.LiveTagUpdateDTO;
import com.xing.entity.LiveTagEntity;
import com.xing.service.LiveTagService;
import com.xing.user.User;
import com.xing.utils.PageData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;

import java.util.List;

import static com.xing.constant.LiveTagConstant.SYSTEM_TAG;

@Service
public class LiveTagServiceImpl extends ServiceImpl<LiveTagDao, LiveTagEntity> implements LiveTagService {

    @Autowired
    private LiveTagDao liveTagDao;

    @Override
    public PageData<LiveTagDTO> getSystemTagByPage(Integer pageNum, Integer pageSize) {
        // 封装查询条件
        LambdaQueryWrapper<LiveTagEntity> lambdaQueryWrapper = Wrappers.lambdaQuery(LiveTagEntity.class)
                .eq(LiveTagEntity::getType, SYSTEM_TAG.getValue())
                .eq(LiveTagEntity::getDelFlag, 0);
        // 查询系统标签总条数
        Long count = liveTagDao.selectCount(lambdaQueryWrapper);
        // 计算分页信息
        int pageStart = (pageNum - 1) * pageSize;
        // 进行查询
        List<LiveTagDTO> liveTagDTOList = liveTagDao.selectLiveTagDtoPage(pageStart, pageSize, SYSTEM_TAG.getValue());
        return new PageData<>(liveTagDTOList, count);
    }

    @Override
    public List<LiveTagDTO> getSystemTagByName(String name) {
        return liveTagDao.getSystemTagByName(name, SYSTEM_TAG.getValue());
    }

    @Override
    public Result saveSystemTag(LiveTagSaveDTO liveTagSaveDTO) {
        // 判断关键数据是否存在
        if (liveTagSaveDTO.getName() == null) return new Result().err(568, "关键数据缺失");
        // 转换为需要操作的实体类
        LiveTagEntity liveTagEntity = BeanUtil.toBean(liveTagSaveDTO, LiveTagEntity.class);
        // 添加必要字段
        User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        liveTagEntity.setCreator(user.getId());
        liveTagEntity.setType(0);
        // 进行插入操作
        int insert = liveTagDao.insert(liveTagEntity);
        if (insert < 1) return new Result().err(456, "插入失败");
        return new Result().ok("插入成功");
    }

    @Override
    public Result updateSystemTag(LiveTagUpdateDTO liveTagUpdateDTO) {
        // 判断关键数据是否存在
        if (liveTagUpdateDTO.getId() == null || liveTagUpdateDTO.getName() == null)
            return new Result().err(568, "关键数据缺失");
        // 转换为需要操作的实体类
        LiveTagEntity liveTagEntity = BeanUtil.toBean(liveTagUpdateDTO, LiveTagEntity.class);
        // 添加必要字段
        User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        liveTagEntity.setCreator(user.getId());
        liveTagEntity.setType(0);
        // 进行修改操作
        int update = liveTagDao.updateById(liveTagEntity);
        // 判断返回结果
        if (update < 1) return new Result().err(456, "修改失败");
        return new Result().ok("修改成功");
    }

    @Override
    public Result deleteSystemTag(Long id) {
        // 判断id是否有效
        LiveTagEntity liveTagEntity = liveTagDao.selectById(id);
        if (liveTagEntity == null) return new Result().err(467, "标签不存在");
        // 对操作数据进行修改
        liveTagEntity.setDelFlag(1);
        int delete = liveTagDao.updateById(liveTagEntity);
        // 判断返回结果
        if (delete < 1) return new Result().err(456, "删除失败");
        return new Result().ok("删除成功");
    }
}
